/*****************************
 *@file: CharacterTeamItem
 *@author: 陈吕唐
 *@desc: 角色队伍成员Item
 *@date: 2024-03-22	19:25
 *****************************/
import { Toggle, _decorator } from 'cc';
import CharacterManageSingle from '../../character/CharacteManageSingle';
import CharacterEntity from '../../character/CharacterEntity';
import { CharacterEntityItem } from './CharacterEntityItem';
const { ccclass, property } = _decorator;

@ccclass('CharacterTeamItem')
export class CharacterTeamItem extends CharacterEntityItem {
    /****************************************************************************************************************
     *Readonly 常量
     ****************************************************************************************************************/

    /****************************************************************************************************************
     *Property 定义变量
     ****************************************************************************************************************/

    /***************************************************************
     *PropertyUI 引用的控件
     ***************************************************************/
    @property({ group: { name: 'Team', id: '3' }, type: Toggle, tooltip: `角色是否出战中单选组件` })
    private playToggle: Toggle = undefined!;
    /****************************************************************************************************************
     * Lifecycle 生命周期相关方法
     ****************************************************************************************************************/
    protected onLoad(): void {
        super.onLoad();

        this.playToggle.node.on(Toggle.EventType.TOGGLE, () => {
            if (this.playToggle.isChecked) {
                this.play();
            } else {
                this.sleep();
            }
        }, this)
    }
    /****************************************************************************************************************
     * Public 公有方法
     ****************************************************************************************************************/

    /****************************************************************************************************************
     * private 私有方法
     ****************************************************************************************************************/
    protected updateView(value: CharacterEntity = this.value): void {
        super.updateView(value);
        this.updatePlay(value);
    }

    /**
     * 更新角色出战状态视图
     * @param value 
     */
    private updatePlay(value: CharacterEntity = this.value) {
        if (!this.enabledInHierarchy) {
            return;
        }

        if (!value) {
            return;
        }
        this.playToggle.isChecked = CharacterManageSingle.single.teamSet.has(value.id);
    }

    /**
     * 角色出战
     */
    private play() {
        let promise = CharacterManageSingle.single.playCharacter(this.value.id);
        promise.then(
            (value) => {
                this.updatePlay();
            }, (error) => {
                this.updatePlay();
            }
        )
    }

    /**
     * 角色下场
     */
    private sleep() {
        let promise = CharacterManageSingle.single.releaseCharacter(this.value.id);
        promise.then(
            (value) => {
                this.updatePlay();
            }, (error) => {
                this.updatePlay();
            }
        )
    }
    /****************************************************************************************************************
     * Property Get && Set 属性的 get && set 函数
     ****************************************************************************************************************/

}

